home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / pcrob13.zip / LIB / PCROBOTS.C < prev    next >
C/C++ Source or Header  |  1992-11-01  |  4KB  |  311 lines

  1. #include <dos.h>
  2. #include "pcrobots.h"
  3.  
  4. void        swaptask(void)
  5. {
  6.  _AX=0;
  7.  geninterrupt(0xe0);
  8. }
  9.  
  10. void        movement(int speed,int angle)
  11. {
  12.  _BX=speed;
  13.  _CX=angle;
  14.  _AX=1;
  15.  geninterrupt(0xe0);
  16. }
  17.  
  18. int     scan(int angle,int res,int *range)
  19. {
  20.  int ax,bx;
  21.  _BX=angle;
  22.  _CX=res;
  23.  _AX=2;
  24.  geninterrupt(0xe0);
  25.  ax=_AX;
  26.  bx=_BX;
  27.  *range=bx;
  28.  return ax;
  29. }
  30.  
  31. int         shoot(int angle,int range)
  32. {
  33.  _BX=angle;
  34.  _CX=range;
  35.  _AX=3;
  36.  geninterrupt(0xe0);
  37.  return _AX;
  38. }
  39.  
  40. void        get_remote_map(char far *ptr,int x,int y)
  41. {
  42.  _CX=FP_OFF(ptr);
  43.  _DH=x;
  44.  _DL=y;
  45.  _BX=FP_SEG(ptr);
  46.  _AX=4;
  47.  geninterrupt(0xe0);
  48. }
  49.  
  50. void        getxy(int *x,int *y)
  51. {
  52.  int x1;
  53.  
  54.  _AX=0x10;
  55.  geninterrupt(0xe0);
  56.  x1=_BX;
  57.  *x=x1;
  58.  *y=_CX;
  59. }
  60.  
  61. int        transmit(int target,int data)
  62. {
  63.  _BX=target;
  64.  _CX=data;
  65.  _AX=0x11;
  66.  geninterrupt(0xe0);
  67.  return _AX;
  68. }
  69.  
  70. int         receive(int *source,int *data)
  71. {
  72.  int ax,bx;
  73.  
  74.  _AX=0x12;
  75.  geninterrupt(0xe0);
  76.  ax=_AX;
  77.  bx=_BX;
  78.  *data=_CX;
  79.  *source=bx;
  80.  return ax;
  81. }
  82.  
  83.  
  84. int         damage(void)
  85. {
  86.  _AX=0x13;
  87.  geninterrupt(0xe0);
  88.  return _BX;
  89. }
  90. int        speed(void)
  91. {
  92.  _AX=0x14;
  93.  geninterrupt(0xe0);
  94.  return _BX;
  95. }
  96.  
  97. int         battery(void)
  98. {
  99.  _AX=0x15;
  100.  geninterrupt(0xe0);
  101.  return _BX;
  102. }
  103.  
  104. long        ticks(void)
  105. {
  106.  
  107.  _AX=0x16;
  108.  geninterrupt(0xe0);
  109.  
  110.  return ((long)_BX<<16)|_CX;
  111. }
  112.  
  113. long        l_sin(int angle)
  114. {
  115.  
  116.  _BX=angle;
  117.  _AX=0x17;
  118.  geninterrupt(0xe0);
  119.  
  120.  return ((long)_BX<<16)|_CX;
  121. }
  122.  
  123.  
  124. long        l_cos(int angle)
  125. {
  126.  
  127.  _BX=angle;
  128.  _AX=0x18;
  129.  geninterrupt(0xe0);
  130.  
  131.  return ((long)_BX<<16)|_CX;
  132. }
  133.  
  134. long        l_tan(int angle)
  135. {
  136.  
  137.  _BX=angle;
  138.  _AX=0x19;
  139.  geninterrupt(0xe0);
  140.  
  141.  return ((long)_BX<<16)|_CX;
  142. }
  143.  
  144. int     l_atan(long ratio)
  145. {
  146.  
  147.  _BX=(int)((unsigned long)ratio>>16);
  148.  _CX=(int)(ratio);
  149.  _AX=0x1a;
  150.  geninterrupt(0xe0);
  151.  
  152.  return _AX;
  153. }
  154.  
  155. long        l_sqrt(long value)
  156. {
  157.  
  158.  _BX=(int)((unsigned long)value>>16);
  159.  _CX=(int)(value);
  160.  _AX=0x1b;
  161.  geninterrupt(0xe0);
  162.  
  163.  return ((long)_BX<<16)|_CX;
  164. }
  165.  
  166. void        set_pattern(const char far *ptr)
  167. {
  168.  _CX=FP_OFF(ptr);
  169.  _BX=FP_SEG(ptr);
  170.  _AX=0x1C;
  171.  geninterrupt(0xe0);
  172. }
  173.  
  174. void        debug_flag(int   flag,int set)
  175. {
  176.  _CX=set;
  177.  _BX=flag;
  178.  _AX=0x1d;
  179.  geninterrupt(0xe0);
  180. }
  181.  
  182. void        buy_armour(int armour_units)
  183. {
  184.  _BX=armour_units;
  185.  _AX=0x1e;
  186.  geninterrupt(0xe0);
  187. }
  188.  
  189. void        buy_shells(unsigned int shells)
  190. {
  191.  _BX=shells;
  192.  _AX=0x1f;
  193.  geninterrupt(0xe0);
  194. }
  195.  
  196. int         shells_left(void)
  197. {
  198.  _AX=0x20;
  199.  geninterrupt(0xe0);
  200.  return _BX;
  201. }
  202.  
  203. void        get_local_map(char far *ptr)
  204. {
  205.  _CX=FP_OFF(ptr);
  206.  _BX=FP_SEG(ptr);
  207.  _AX=0x21;
  208.  geninterrupt(0xe0);
  209. }
  210.  
  211. void        invisibility(int invis_flag)
  212. {
  213.  _BX=invis_flag;
  214.  _AX=0x22;
  215.  geninterrupt(0xe0);
  216. }
  217.  
  218. int        get_shell_status(void)
  219. {
  220.  _AX=0x23;
  221.  geninterrupt(0xe0);
  222.  return _BX;
  223. }
  224.  
  225. int        is_invisible(void)
  226. {
  227.  _AX=0x24;
  228.  geninterrupt(0xe0);
  229.  return _BX;
  230. }
  231.  
  232. int     l_atan2(int y,int x)
  233. {
  234.  
  235.  _BX=y;
  236.  _CX=x;
  237.  _AX=0x25;
  238.  geninterrupt(0xe0);
  239.  
  240.  return _AX;
  241. }
  242.  
  243. int     get_robot_id(void)
  244. {
  245.  _AX=0x26;
  246.  geninterrupt(0xe0);
  247.  return _AX;
  248. }
  249.  
  250. void    register_iff(char far *iff_str)
  251. {
  252.  _CX=FP_OFF(iff_str);
  253.  _BX=FP_SEG(iff_str);
  254.  _AX=0x27;
  255.  geninterrupt(0xe0);
  256. }
  257.  
  258. int     check_iff(int id)
  259. {
  260.  _BX=id;
  261.  _AX=0x28;
  262.  geninterrupt(0xe0);
  263.  return _AX;
  264. }
  265.  
  266. void    register_name(char far *name_str)
  267. {
  268.  _CX=FP_OFF(name_str);
  269.  _BX=FP_SEG(name_str);
  270.  _AX=0x29;
  271.  geninterrupt(0xe0);
  272. }
  273.  
  274. int     find_name(int start_id,char far *name_str)
  275. {
  276.  _CX=FP_OFF(name_str);
  277.  _BX=FP_SEG(name_str);
  278.  _DX=start_id;
  279.  _AX=0x2a;
  280.  geninterrupt(0xe0);
  281.  return _AX;
  282. }
  283.  
  284. int     get_team_id(void)
  285. {
  286.  _AX=0x2b;
  287.  geninterrupt(0xe0);
  288.  return _AX;
  289. }
  290.  
  291.  
  292. int        configure(int    speed,int manouevre,int range,
  293.             int armour,int acceleration,
  294.             int invisibility)
  295. {
  296.  unsigned int bx=(speed&7)+((manouevre&7)<<4)+((range&7)<<8)+((armour&7)<<12);
  297.  long x=(long)getvect(0xe0);
  298. /* Exit if PCRobots vector isn't initialised.
  299.    I don't print anything as the printing routines can be quite large
  300. */
  301.  if (x==0)
  302.   exit(1);
  303.  _CX=(acceleration&7)+((invisibility&1)<<3);
  304.  _BX=bx;
  305.  _AX=0x80;
  306.  geninterrupt(0xe0);
  307.  
  308.  return (_AX);
  309. }
  310.  
  311.